package com.atguigu.hospital.util;

import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;

@Slf4j
public class HttpRequestHelper {

	//private final static String signKey = "09c1ff67d1ae4999e137f34b0dff1046";

	public static void main(String[] args) {
		Map<String, Object> paramMap = new HashMap<>();
		paramMap.put("d", "4");
		paramMap.put("b", "2");
		paramMap.put("c", "3");
		paramMap.put("a", "1");
		log.info(getSign(paramMap, ""));
	}

	/**
	 * @param paramMap
	 * @return
	 */
	public static Map<String, Object> switchMap(Map<String, String[]> paramMap) {
		Map<String, Object> resultMap = new HashMap<>();
		for (Map.Entry<String, String[]> param : paramMap.entrySet()) {
			resultMap.put(param.getKey(), param.getValue()[0]);
		}
		return resultMap;
	}

	/**
	 * 请求数据获取签名
	 *
	 * @param paramMap
	 * @return
	 */
	public static String getSign(Map<String, Object> paramMap, String signKey) {
		if (paramMap.containsKey("sign")) {
			paramMap.remove("sign");
		}
		TreeMap<String, Object> sorted = new TreeMap<>(paramMap);
		StringBuilder str = new StringBuilder();
		for (Map.Entry<String, Object> param : sorted.entrySet()) {
			str.append(param.getValue()).append("|");
		}
		str.append(signKey);
		log.info("加密前：" + str.toString());
		String md5Str = MD5.encrypt(str.toString());
		log.info("加密后：" + md5Str);
		return md5Str;
	}

	/**
	 * 签名校验
	 *
	 * @param paramMap
	 * @return
	 */
	public static boolean isSignEquals(Map<String, Object> paramMap, String signKey) {
		String sign = (String) paramMap.get("sign");
		String md5Str = getSign(paramMap, signKey);
		if (!sign.equals(md5Str)) {
			return false;
		}
		return true;
	}

	/**
	 * 获取时间戳
	 *
	 * @return
	 */
	public static long getTimestamp() {
		return new Date().getTime();
	}

	/**
	 * 封装同步请求
	 *
	 * @param paramMap
	 * @param url
	 * @return
	 */
	public static JSONObject sendRequest(Map<String, Object> paramMap, String url) {
		String result = "";
		try {
			//封装post参数
			StringBuilder postdata = new StringBuilder();
			for (Map.Entry<String, Object> param : paramMap.entrySet()) {
				postdata.append(param.getKey()).append("=")
						.append(param.getValue()).append("&");
			}
			log.info(String.format("--> 发送请求：post data %1s", postdata));
			byte[] reqData = postdata.toString().getBytes("utf-8");
			byte[] respdata = HttpUtil.doPost(url, reqData);
			result = new String(respdata);
			log.info(String.format("--> 应答结果：result data %1s", result));
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		return JSONObject.parseObject(result);
	}
}
